//package com.example.huajia.wx.task;
//
//import com.alibaba.fastjson.JSONObject;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.client.RestTemplate;
//
//import javax.websocket.OnClose;
//import javax.websocket.OnMessage;
//import javax.websocket.OnOpen;
//import javax.websocket.Session;
//import javax.websocket.server.PathParam;
//import javax.websocket.server.ServerEndpoint;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.concurrent.CopyOnWriteArraySet;
//
///**
// * onlineUser 当前登录用户账号
// * */
//@Component
//@Slf4j
//@ServerEndpoint("/websocket/{onlineUser}")
//public class WebSocket {
//
//    /**
//     * 线程安全的无序的集合
//     */
//    private static final CopyOnWriteArraySet<Session> SESSIONS = new CopyOnWriteArraySet<>();
//
//    /**
//     * 存储在线连接数
//     */
//    private static final Map<String, Session> SESSION_POOL = new HashMap<>();
//
//    /**
//     * 连接成功时
//     * */
//    @OnOpen
//    public void onOpen(Session session, @PathParam(value = "onlineUser") String onlineUser) {
//        try {
//            SESSIONS.add(session);
//            SESSION_POOL.put(onlineUser, session);
//            log.info("【WebSocket消息】有新的连接，总数为：" + SESSIONS.size());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 断开连接
//     * */
//    @OnClose
//    public void onClose(Session session) {
//        try {
//            SESSIONS.remove(session);
//            log.info("【WebSocket消息】连接断开，总数为：" + SESSIONS.size());
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 消息
//     * */
//    @OnMessage
//    public void onMessage(String message,@PathParam("onlineUser") String onlineUser) {
//        log.info("【WebSocket消息】"+onlineUser+"发送消息：" + message);
//        //解析数据，发送消息到接收方
//        JSONObject json = JSONObject.parseObject(message);
//        //发送消息
//        sendOneMessage(String.valueOf(json.get("receiverId")), onlineUser, message);
//    }
//
//    /**
//     * 消息流动
//     *
//     * @param toUserId  接收者用户
//     * @param message 消息
//     */
//    public void sendOneMessage(String toUserId, String onlineUser, String message) {
//        Session session = SESSION_POOL.get(onlineUser);
//        if (session != null && session.isOpen()) {
//            try {
//                synchronized (session) {
//                    log.info("【WebSocket消息】消息流动：" + message);
//                    session.getAsyncRemote().sendText(message);
//                }
//            } catch (Exception e) {
//                e.printStackTrace();
//            }
//        }
//    }
//
//}
